/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.controller;

import br.com.folha.dao.GenericoDao;
import br.com.folha.dao.UsuarioDao;
import br.com.folha.entity.Usuario;
import br.com.folha.utilidades.utilidades;
import java.io.IOException;
import java.io.Serializable;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author marceloml
 */
@ManagedBean(name = "ConfigController")
@ViewScoped
public class ConfigController implements Serializable{
    
    private static final long serialVersionUID = 1L;
    private Usuario usuario;
    private Usuario resultado;
    private Date data;
    
    private GenericoDao usuarioDao = new GenericoDao(); 
    private boolean retorno;
    private int resultadoLogin;
    
    private String senhaCriptografada;
    
    public ConfigController(){
        
        usuario = new Usuario();
        
        LoginController login = new LoginController();
        
        usuario = login.getUsuario();        
        
        this.senhaCriptografada = this.usuario.getSenha();
        
    }
    
    public Usuario preparaEdicao(){
        
        FacesMessage msg = null;
        FacesContext context = FacesContext.getCurrentInstance();    
        
        LoginController login = new LoginController();                                                     
        
        if(usuario.getNome().equals("")){
                        
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "O nome do usuário deve ser informado", "");
            context.getCurrentInstance().addMessage(null, msg);
            
        }if(usuario.getLogin().equals("")){
                                    
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "O login do usuário deve ser informado", "");
            context.getCurrentInstance().addMessage(null, msg);                         
            
        }else{                         

                    if(!(this.usuario.getLogin().equals(login.getUsuario().getLogin()))){
                        
                        UsuarioDao consulta = new UsuarioDao();
                        resultadoLogin = consulta.consultaLogin(usuario.getLogin());  
                        
                        if(resultadoLogin == 0){
                            editaUsuario();
                            resetUsuario();
                            
                            try {
                                login.logout();
                            } catch (IOException ex) {
                                Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            
                        }else{
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Já existe um usuário com esse login", "");
                            context.getCurrentInstance().addMessage(null, msg);
                        }                        
                        
                    }else{
                                        
                        editaUsuario();
                        resetUsuario();     
                    
                    }
                        
        }
        
        return usuario;
        
    }
    
    public void editaUsuario(){
        
        FacesMessage msg = null;
        FacesContext context = FacesContext.getCurrentInstance();   
        
        this.usuario.setDt_cadastro(data);
        
                String senha = this.usuario.getSenha();                                
                
                if(senha != null && senha.trim().length() == 0){
                    this.usuario.setSenha(this.senhaCriptografada);                
                }else{
                    utilidades utilidades = new utilidades();
                    try {
                        this.usuario.setSenha(utilidades.criptografaSenha(this.usuario.getSenha()));
                    } catch (NoSuchAlgorithmException ex) {
                        Logger.getLogger(UsuarioController.class.getName()).log(Level.SEVERE, null, ex);
                    }                    
                }        
        
        LoginController login = new LoginController();                
        
        this.usuario.setUsuario_cadastro(login.Usuario.getId());  
        
        this.usuario.setDt_atualizacao(data);
        
        retorno = usuarioDao.atualizar(usuario);
        
                if(retorno){           

                    msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Usuário atualizado com sucesso!", "");
                    FacesContext.getCurrentInstance().addMessage(null, msg);

                }        
        
    }
    
    public void resetUsuario(){

        usuario = new Usuario();    
        
        LoginController login = new LoginController();          
        
        usuario = login.getUsuario();

    }    
    
    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getSenhaCriptografada() {
        return senhaCriptografada;
    }

    public void setSenhaCriptografada(String senhaCriptografada) {
        this.senhaCriptografada = senhaCriptografada;
    }
    
}
